package float64

import (
	"fmt"
	"math/rand"
	"time"
)

// 类似 11.7 和示例 11.3/4，定义一个包 float64，并在包里定义类型 Float64Array，然后让它实现 Sorter 接口用来对 float64 数组进行排序。

// 另外提供如下方法：

// NewFloat64Array()：创建一个包含 25 个元素的数组变量（参考 10.2 ）
// List()：返回数组格式化后的字符串，并在 String() 方法中调用它，这样就不用显式地调用 List() 来打印数组（参考 10.7）
// Fill()：创建一个包含 10 个随机浮点数的数组（参考 4.5.2.6）

// 在主程序中新建一个此类型的变量，然后对它排序并进行测试。

type Float64Array []float64

func (f Float64Array) Len() int           { return len(f) }
func (f Float64Array) Less(a, b int) bool { return f[a] < f[b] }
func (f Float64Array) Swap(a, b int)      { f[a], f[b] = f[b], f[a] }

func NewFloat64Array() Float64Array {
	return make(Float64Array, 25)
}

func (f Float64Array) List() string {
	s := "{"
	for _, data := range f {
		s += fmt.Sprintf("%3.1f ", data)
	}
	s += "}"
	return s
}

func (f Float64Array) String() string {
	return f.List()
}

func (f Float64Array) Fill(n int) {
	rand.Seed(int64(time.Now().Nanosecond()))
	for i := 0; i < n; i++ {
		f[i] = rand.Float64()
	}
}
